package com.ricky.admin.util;

import cn.hutool.core.util.StrUtil;
import com.ricky.common.core.domain.entity.SysDept;
import com.ricky.common.core.domain.entity.SysUser;
import com.ricky.common.core.domain.model.LoginUser;
import com.ricky.common.utils.SecurityUtils;
import com.ricky.common.utils.spring.SpringUtils;
import com.ricky.system.service.ISysDeptService;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * @Author Ricky
 * @Date 2024/6/20 14:08
 * @Description: 获取登陆用户信息工具类
 */
public class LoginUserUtils {

    /**
     * 获取当前登录用户信息
     */
    public static LoginUser getLoginUser(){
        return SecurityUtils.getLoginUser();
    }


    /**
     * 获取用户信息
     */
    public static SysUser getUser(){
        return getLoginUser().getUser();
    }


    /**
     * 获取用户id
     */
    public static String getUserId(){
        return getUser().getUserId().toString();
    }

    /**
     * 获取用户名称
     */
    public static String getUserName(){
        return getUser().getUserName();
    }

    /**
     * 检查当前用户是否拥有指定的职位类型ID。
     *
     * @param type 职位类型ID字符串
     * @return 如果用户拥有该职位类型ID则返回true，否则返回false。
     */
    public static boolean isUserInPostType(String type) {
        // 验证输入字符串是否为空
        if (StrUtil.isEmpty(type)) {
            return false;
        }
        try {
            SysUser user = getUser(); // 假设此方法安全并处理了异常
            Long[] postIds = user.getPostIds();
            // 如果用户或职位ID为空，直接返回false
            if (postIds == null || postIds.length == 0) {
                return false;
            }
            // 使用HashSet优化查找性能
            Set<Long> postIdsSet = new HashSet<>(Arrays.asList(postIds));
            return postIdsSet.contains(type);
        } catch (Exception e) {
            // 异常处理逻辑：根据实际情况记录日志或执行其他必要操作
            // 此处为示例，实际应用中可能需要更详细的异常处理
            System.err.println("Error fetching user or post IDs: " + e.getMessage());
            return false;
        }
    }

    /**
     * 获取当前用户机构信息
     *
     * @return 用户机构
     */
    public static SysDept getUserOrg() {
        ISysDeptService sysDeptService = SpringUtils.getBean(ISysDeptService.class);
        if (StrUtil.isNotBlank(getUser().getDeptId().toString())) {
            Long deptId = getUser().getDeptId();
            return sysDeptService.selectDeptById(deptId);
        } else {
            return null;
        }
    }

    /**
     * 获取当前用户部门信息
     *
     * @return 用户部门
     */
    public static SysDept getUserDept() {
        ISysDeptService sysDeptService = SpringUtils.getBean(ISysDeptService.class);
        if (StrUtil.isNotBlank(getUser().getDeptId().toString())) {
            return sysDeptService.selectDeptById(getUser().getDeptId());
        }
        else
        {
            return null;
        }
    }
}
